
package br.uefs.ecomp.redeneural.model;

import br.uefs.ecomp.redeneural.util.Constantes;

/**
 *
 * @author Beto
 */
public class Neuronio {

    private double entradas[];
    private double pesos[];
    private double pesoBias;
    private double ultimoGradienteLocal;
    
    public Neuronio() {
        pesoBias = 0.5 * Math.random();
    }

        public double somatorio() {
        double somatorio;

        somatorio = Constantes.BIAS * pesoBias;
        for(int i = 0; i < entradas.length; i++)
            somatorio += entradas[i] * pesos[i];

        return somatorio;
    }

    public double gerarSaida() {
        return Calculos.sigmoide(somatorio());
    }

    public double[] getEntradas() {
        return entradas;
    }

    public void setEntradas(double[] entradas) {
        this.entradas = entradas;
    }

    public double getPesoBias() {
        return pesoBias;
    }

    public void setPesoBias(double pesoBias) {
        this.pesoBias = pesoBias;
    }

    public double[] getPesos() {
        return pesos;
    }

    public void setPesos(double[] pesos) {
        this.pesos = pesos;
    }

    public double getUltimoGradienteLocal() {
        return ultimoGradienteLocal;
    }

    public void setUltimoGradienteLocal(double ultimoGradienteLocal) {
        this.ultimoGradienteLocal = ultimoGradienteLocal;
    }
    
    public static double calcularErro(double saidaEncontrada, double saidaDesejada) {
        return Math.pow(saidaDesejada - saidaEncontrada, 2);
    }

}
